The present invention relates generally to printing of data stored in TIFF files, and more particularly to methods and system components for printing multiple TIFF files in a single print job.
The Tagged Image File Format, usually referred to by the acronym TIFF, is detailed in current form in the specification TIFF: Revision 6.0, Adobe Developers Assoc., Jun. 3, 1992. TIFF is but one of many image file formats in existence. TIFF is particularly popular as a scanned image storage format (for instance the U.S. Patent Office stores patent pages for online retrieval as TIFF files). TIFF incorporates several features that have contributed to its popularity, including a flexible file structure, an extendable design, and portability features.
A TIFF file must contain at least three data components, an Image File Header, an Image File Directory (IFD) for an image, and image data corresponding to that IFD. The file may contain additional IFD/image data pairings, as TIFF allows more than one image per file.
The Image File Header (IFH) must reside in the first eight bytes of the file. The IFH contains a byte-ordering field, a version field (fixed to a binary representation of the decimal value 42), and a pointer to the first (or only) IFD present in the file. (Note that the first IFD is logically the first IFDxe2x80x94it may in fact be positioned anywhere after the header within the file stream, including after IFDs for later images.) A TIFF reader follows the first IFD pointer to locate the first IFD in the file.
The IFD stores Directory Entries (DEs) that describe various parameters associated with a TIFF image. Each IFD begins with a two-byte count of the number of DEs in that IFD. The DEs follow thereafter, each DE occupying 12 bytes. Immediately following the last DE is a four-byte pointer to the next IFD in the file. The next lFD pointer is a NULL pointer if no other IFDs exist in the file.
Directory Entries can store a wide range of information about an image. Each DE begins with a tag field. The numeric value of the tag is assigned to a particular image parameter, i.e., tag 258 indicates that the DE describes the number of bits/sample, a DE with tag 256 indicates image width, a DE with tag 257 indicates image length, and tag 273 indicates that the DE points to file offset pointers for the image. In addition to standard DE tags, vendors may request and be assigned xe2x80x9cprivatexe2x80x9d tags, which will generally be ignored by other vendors"" TIFF readers.
After the DE tag, a type field describes the type of data stored in the DE, a length field describes the number of data entries stored in the DE, and a value/offset field stores either the DE value (if less than or equal to four bytes in length), or a pointer to a location where the DE value is stored.
TIFF capability is generally present in multifunction printers (MFPs) that combine a scanning unit and a printing unit in one device. The scanning unit typically translates scanned images into a TIFF stream. Most MFPs have a xe2x80x9ccopyxe2x80x9d mode that operates by scanning an image with the scanning unit, and then sending the TIFF output stream from the scanning unit directly to the printing unit. The printing unit of such a device preferably supports TIFF input without additional rasterization, and can thus efficiently print the scanned document.
MFPs often contain a Page Description Language (PDL) interpreter, such as a Postscript or PCL (Printer Control Language) interpreter, that parses and rasterizes print data from, e.g., a remote client. When the MFP device is interpreting PDL input, print engine performance is degraded, as the print engine must wait for rasterization of the PDL data.
Some MFP devices contain a TIFF bypass pipeline within the PDL interpreter. The PDL interpreter accepts TIFF data and passes that data through the bypass directly to the print engine, just as the scanning unit does. When a client document is already stored in TIFF format (e.g., stored faxes, document scans, digital images), maximum printing engine performance can be obtained by submitting the TIFF document directly to the printer. In such a case, neither the client, nor the printer, nor any intervening print server need perform document rasterization, and printing can proceed most efficiently.
It is recognized herein that the particular format of TIFF files limits TIFF document printing, in a prior art printer TIFF bypass system, to one TIFF file per print job. In circumstances where it is desirable that multiple TIFF files be printed together (e.g., the files are related), the one-file-per-print-job limitation can sap the advantages from TIFF bypass printing. A human user may have to expend additional effort to create the separate print jobs, possibly having to re-enter print options for each page. Each print job will reset the printer, causing interfile print engine delays and reducing engine performance. With a shared printer, other print jobs can get interleaved between the separate TIFF print jobs. And some print options simply will not work right across multiple jobs, e.g., multiple collated copies, stapling, duplex printing, etc.
One solution to this problem is to simply merge multiple TIFF files into a single multi-image TIFF file or data stream. The merged TIFF file can be presented as a single TIFF job to the print engine, avoiding some of the problems above. But such an approach is not without its own problems. First, additional human effort may be required to merge the files, and substantial additional computer resources are required to complete the merge. Each TIFF file must be parsed and edited to recalculate all internal pointer values to be consistent with the position of that file within the merged file. In addition to the computational work this creates, it can also result in significant problems. For instance, the merged file may be too large for the TIFF pointer size, and/or a merging program may not recognize proprietary-tagged pointers and will thus not adjust them properly. In short, the effort required and attendant risks may not be warranted for a transient file such as a printer spool file.
In accordance with the present disclosure, several related approaches to printing multiple TIFF files within a single print job are disclosed. Common to each approach is a step of concatenating the multiple TIFF files into the print job, or more specifically, concatenating the image and image pointer data without disturbing their position within each file (some embodiments require some minimal IFD manipulation). Also common is the step of adding tag data to the print jobxe2x80x94the tag data contains information that allows the printer to recognize that the data came from multiple TIFF files, and process each TIFF file section. The tag data may be, e.g., entered in a printer job language, or contained in additional DEs added to each TIFF file. Such tag data can generally be added without extensive parsing and computation on the individual TIFF files, and preferably avoids the problems inherent in merging multiple TIFF files.
Related methods for processing a print job containing such concatenated TIFF file data and tag data are disclosed. Image data corresponding to the first of several TIFF files is rendered. Tag data within the print job is recognized, the tag data indicating that the print job TIFF data continues beyond the data from the first TIFF file. Print parameters are adjusted according to the tag data, thus allowing TIFF reading of data corresponding to the next TIFF file, and then the next TIFF file is rendered.
A print device capable of rendering TIFF data is also disclosed. The print engine in this device has a TIFF reader and the capability to process a print job comprising image and image pointer data from multiple concatenated TIFF files and tags instructing the print engine how to read the concatenated TIFF data. The device also has a marking engine to print processed data received from the print engine.
A print assistant (e.g., an executable print client process) is also disclosed. This print assistant comprises a TIFF data concatenator to place TIFF data from multiple TIFF files in a common print data stream, and a tag insertion module to place tags in the print data stream. The tags contain instructions that a print engine will need to read the concatenated TIFF data.